<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>傻瓜弹曲</title>
  <link rel="stylesheet" href="index.css">
  <base target="_blank" />
</head>
<body>
  <h1>傻瓜弹曲</h1>
  <p>
    使用公元前 1980 年的人工智障技术制造的一个输入简谱并且能够带伴奏与歌词播放的APP。
  </p>
  <p>
    <a href="edit.htm">傻瓜弹曲程序入口&gt;&gt;&gt;</a>
  </p>
  <p style="color:red">
    警告：有大量浏览器不能正确保存文件。如果您用手机编辑乐谱，请先测试保存功能能否正常工作，以防数据丢失。
  </p>
  <details>
    <summary>其实能否正常保存，试试便知：</summary>
    <p><a href="FAIL.htm" onclick='util_saveAs("下载测试通过","text/plain","下载测试通过.txt"); return false;'>测试网页脚本生成文件下载</a></p>
    <script>
function util_saveAs(content,mine,fileName){
  var url;
  var blob;
  /* 不使用文件本身的 MIME 以防触发浏览器特殊机制（如Chrome 会把网页 “打包”为MHTML 并破坏追加的脚本区域） */
  if(mine.indexOf('html') > -1){
    mine = 'application/octet-stream';
  }
  try {
    blob = new File([content],fileName,{type:mine});
  }catch(e){
    blob = new Blob([content],{type:mine});
    blob = new Blob([content],{type:mine});
  }
  url = URL.createObjectURL(blob);
  setTimeout(function(){
    URL.revokeObjectURL(url)
  },40*1000);
  if(blob){
    if ('msSaveOrOpenBlob' in navigator) {
      window.navigator.msSaveOrOpenBlob(blob, fileName);
      return;
    }
  }
  var link = document.createElement('a');
  link.href = url;
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}
    </script>
    <p>点击上面链接后：</p>
    <ol>
      <li>应该提示下载文件而非打开新页面；</li>
      <li>下载应马上开始而不会有超过 1s 的延迟；</li>
      <li>您应该可以打开下载后的文件，它应该是个文档，内含“下载测试通过”字样；</li>
    </ol>
  </details>
  <p>
    <a href="edit.htm#music=xy">《心愿》</a> |
    <a href="edit.htm#music=tl">《踏浪》</a> |
    <a href="edit.htm#music=apchy">《爱拼才会赢》</a> |
    <a href="edit.htm#music=ldzgr">《劳动最光荣》</a> |
    <a href="edit.htm#music=tzdn">《同桌的你》</a>

  </p>
  <p>
    <a href="http://users.smartgb.com/g/g.php?a=s&i=g18-84768-1a">留言本</a> | <a href="http://gitee.com/asdfqw/FoolPlay">本程序的源代码</a>
  </p>
  <h2>功能</h2>
  <p>
    （如上所述）
  </p>
  <ul>
    <li>键盘简谱输入；</li>
    <li>
      简易播放，包括人声合成以及伴奏，但没有暂停（<code>|X X X X|X X X X|...|</code>。人声方面，加载袅袅格式音源实现中文合成，加载meSpeak TTS 引擎实现英文合成。
      ）；
    </li>
    <li>可以按照JSON格式保存到电脑上或者读取由本程序保存功能输出的文件。</li>
  </ul>
  <p>
    至于菜单上所显示的剩下几乎所有功能都没有实现（不要奇怪为什么点击某选项没有反应）。编辑功能有些Bug，不要太介意……
  </p>
  <h2>浏览器</h2>
  <ul>
    <li>最新的桌面浏览器（对于Chr***系列，从55开始）应该都能工作；</li>
    <li>Internet Explorer 11（以及部分手机浏览器，如安卓4.x自带WebView）之类近代浏览器（无 Web Audio API 支持）可以编辑歌谱，但不能出声音。不对其中的错误提示框负责。</li>
    <li>介意ES6语法的浏览器不能工作。</li>
    <li>有严重的性能问题，但暂时不会得到解决。</li>
  </ul>
  <h2>计划</h2>
  <p>
    本人很懒，无心更新，下面的计划压根不会执行。在放寒暑假的时候可能会动一动。
  </p>
  <ul>
    <li>加入对反复记号以及弱起的支持；</li>
    <li>简化以及去除各 JS 文件内的多余代码；</li>
    <li>美化歌谱及编辑器</li>
    <li>解决浏览器打印不分页问题</li>
    <li>……</li>
  </ul>
  <h2>不多的帮助</h2>
  <ul>
    <li>
      <code>数字</code>
      -&gt;简谱音符表示
    </li>
    <li>
      <code>+（或者!）</code>
      -&gt;普通音高或低八度
    </li>
    <li>
      <code>*</code>
      -&gt;普通音高或高八度
    </li>
    <li>
      <code>-</code>
      -&gt;延长音符（加时线）
    </li>
    <li>
      <code>_</code>
      （<code>Shift + -</code>
      ） -&gt;缩短音符（减时线）
    </li>
    <li>
      <code>^</code>
      -&gt;在光标前面的音符的前面画一条延音线/圆滑线（两个音的圆滑线？）
    </li>
    <li>
      <code>` </code>
      -&gt;延长前一个音符
    </li>
    <li>
      <code>Ctrl + ↑|↓</code>
      -&gt;切换编辑歌谱以及歌词（不支持多段，因为无法播放）。
      <ul>
        <li>用鼠标点击音符下方的空白区域也可以</li>
      </ul>
    </li>
  </ul>
  <h2>鸣谢</h2>
  <ul>
    <li>怒独僧简谱字体 （<a href="http://www.nuduseng.com/jianpu/">http://www.nuduseng.com/<wbr>jianpu/</a>）</li>
    <li>tiny-pinyin （<a href="https://github.com/creeperyang/pinyin/">https://github.com/<wbr>creeperyang/<wbr>pinyin/</a>）</li>
    <li>yux-storage （<a href="https://github.com/yued-fe/yux-storage">https://github.com/<wbr>yued-fe/<wbr>yux-storage</a>）</li>
    <li>瑾年 （<a href="https://dsailab.com/voice/info/JIN%20NIAN/">https://dsailab.com/<wbr>voice/<wbr>info/<wbr>JIN%20NIAN/</a>）</li>
    <li>meSpeak.js （<a href="https://www.masswerk.at/mespeak/">https://www.masswerk.at/<wbr>mespeak/</a>）</li>
  </ul>
</body>
</html>